約 2,010,436 件
https://w.atwiki.jp/lockerroom/pages/13.html
ActiveX.ahk /* COM操作ライブラリby 流行らせるページ管理人 Ver 3β / ActiveX(){ global IID_IDispatch =GUID("{00020400-0000-0000-C000-000000000046}") IID_IUnknown =GUID("{00000000-0000-0000-C000-000000000046}") IID_NULL =GUID("{00000000-0000-0000-0000-000000000000}") IID_IConnectionPointContainer =GUID("{B196B284-BAB4-101A-B69C-00AA00341D07}") IID_IProvideClassInfo =GUID("{B196B283-BAB4-101A-B69C-00AA00341D07}") ;IID_IProvideClassInfo2 =GUID("{A6BC3AC0-DBAA-11CE-9DE3-00AA004BB851}") LOCALE_USER_DEFAULT =DllCall("kernel32.dll¥GetUserDefaultLCID") CoInitialize() } /* ********************************** 汎用メモリ管理 ********************************** / ;メモリを確保しポインタを返す Malloc(size,flag=0x40){ return DllCall("kernel32.dll¥GlobalAlloc","UInt",flag,"UInt",size,"UInt") } ;ポインタで指定されたメモリを解放する Free(p){ DllCall("kernel32.dll¥GlobalFree",UInt,p,UInt) } /* ********************************** GUID関連 ********************************** / ;CLSID文字列からGUID構造体を生成しアドレスを得る(仮) GUID(string){ size =DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",string,"Int",-1,"UInt",0,"Int",0) wstr =Malloc((size+1)*2) DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",string,"Int",-1,"UInt",wstr,"Int",(size+1)*2) ptr =Malloc(16) DllCall("ole32.dll¥CLSIDFromString","UInt",wstr,"UInt",ptr) Free(wstr) return ptr } ;ProgID文字列からGUID構造体を生成しアドレスを得る(仮) ProgID(string){ size =DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",string,"Int",-1,"UInt",0,"Int",0) wstr =Malloc((size+1)*2) DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",string,"Int",-1,"UInt",wstr,"Int",(size+1)*2) ptr =Malloc(16) DllCall("ole32.dll¥CLSIDFromProgID","UInt",wstr,"UInt",ptr) Free(wstr) return ptr } ;GUID構造体を文字列に変換 fromGUID(ByRef guid){ ptr =Malloc(80) DllCall("ole32.dll¥StringFromGUID2","UInt",guid,"UInt",ptr,"Int",80) res =wc2mb(ptr) Free(ptr) return res } /* ********************************** Unicode関連 ********************************** / ;文字列からにUnicodeへの変換を行う ;返り値はUnicode文字列へのポインタ mb2wc(mbstr){ size =(DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",mbstr,"Int",-1,"UInt",0,"Int",0)+1)*2 wstr =Malloc(size) DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",mbstr,"Int",-1,"UInt",wstr,"Int",size) return wstr } mb2wc_ref(ByRef mbstr){ size =(DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",mbstr,"Int",-1,"UInt",0,"Int",0)+1)*2 wstr =Malloc(size) DllCall("kernel32.dll¥MultiByteToWideChar","UInt",0,"UInt",0,"Str",mbstr,"Int",-1,"UInt",wstr,"Int",size) return wstr } ;UnicodeからAnsi文字列への変換を行う ;返り値は文字列 wc2mb(wstr){ size =DllCall("kernel32.dll¥WideCharToMultiByte","UInt",0,"UInt",0,"UInt",wstr,"Int",-1,"UInt",0,"Int",0,"UInt",0,"UInt",0) VarSetCapacity(mbstr,size) DllCall("kernel32.dll¥WideCharToMultiByte","UInt",0,"UInt",0,"UInt",wstr,"Int",-1,"Str",mbstr,"Int",size,"UInt",0,"UInt",0) return mbstr } wc2mb_ref(wstr,ByRef mbstr){ size =DllCall("kernel32.dll¥WideCharToMultiByte","UInt",0,"UInt",0,"UInt",wstr,"Int",-1,"UInt",0,"Int",0,"UInt",0,"UInt",0) VarSetCapacity(mbstr,size) DllCall("kernel32.dll¥WideCharToMultiByte","UInt",0,"UInt",0,"UInt",wstr,"Int",-1,"Str",mbstr,"Int",size,"UInt",0,"UInt",0) return size } /* ********************************** COM汎用 ********************************** / CoInitialize(){ return DllCall("ole32.dll¥CoInitialize","UInt",0,"UInt") } CoUninitialize(){ return DllCall("ole32.dll¥CoUninitialize","UInt",0,"UInt") } OleInitialize(){ return DllCall("ole32.dll¥OleInitialize","UInt",0,"UInt") } OleUninitialize(){ return DllCall("ole32.dll¥OleUninitialize","UInt",0,"UInt") } CoTaskMemAlloc(size){ return DllCall("ole32.dll¥CoTaskMemAlloc","UInt",size,"UInt") } CoTaskMemFree(ptr){ return DllCall("ole32.dll¥CoTaskMemFree","UInt",ptr,"UInt") } M(ByRef ip,idx=0){ return NumGet(NumGet(ip+0)+4*idx) } QueryInterface(pObj,strIID=""){ global IID_IDispatch guid =0 if(strIID=""){ IID =IID_IDispatch }else if(StrLen(strIID)=38){ IID =GUID(strIID) }else{ IID =strIID } res =0 ErrorLevel =DllCall(M(pObj,0),"UInt",pObj,"UInt",IID,"UIntP",res) return res } AddRef(pObj){ if(pObj){ DllCall(M(pObj,1),"UInt",pObj) } return pObj } Release(pObj){ if(pObj){ return DllCall(M(pObj,2),"UInt",pObj) } } ReleaseL(p1,p2=-1,p3=-1,p4=-1,p5=-1,p6=-1,p7=-1,p8=-1,p9=-1){ format =A_FormatInteger SetFormat,Integer,D Loop,10{ if(p%A_Index%!=-1){ Release(p%A_Index%) } } SetFormat,Integer,%format% } /* ********************************** VARIANT関連 ********************************** / ;Ansi文字列をBSTR形式に変換する toBSTR(str){ oc =mb2wc(str) res =DllCall("oleaut32.dll¥SysAllocString","UInt",oc,"UInt") Free(oc) return res } ;BSTRをAnsi文字列に変換する fromBSTR(bstr){ return wc2mb(bstr) } ;BSTRを解放する(VariantClear内でやってくれるはずなので多分不要) freeBSTR(bstr,get=0){ if(get!=0){ wc2mb_ref(bstr,res) }else{ res= } DllCall("oleaut32.dll¥SysFreeString","UInt",bstr) return res } vNull(){ return 0x7FFFFFFF00000000 } vObj(obj){ return 0x7FFFFFFF00000000 | obj } ;VARIANTに変換(typeには変換したい型を指定 ;settypeを指定すると、型変換した上で、型を示す値としてsettypeで指定した型を格納する toVariant(value,variant=0,type=0x08,settype=-1){ global LOCALE_USER_DEFAULT ;格納先初期化 if(variant=0){ dest =Malloc(16) }else{ dest =variant } DllCall("oleaut32.dll¥VariantInit","UInt",dest) if(type=0x08){ if(value 32 = 0x7FFFFFFF){ if(value-0x7FFFFFFF00000000=0){ ;VT_NULL NumPut(0x01,dest+0,0,"UShort") }else{ ;VT_DISPATCH NumPut(0x09,dest+0,0,"UShort") NumPut(value - 0x7FFFFFFF00000000,dest+8,0) } }else{ ;文字列の場合 NumPut(0x08,dest+0,0,"UShort") NumPut(toBSTR(value),dest+8,0) } }else{ ;それ以外の型の場合 tmp =toVariant(value) DllCall("oleaut32.dll¥VariantChangeTypeEx","UInt",dest,"UInt",tmp,"UInt",LOCALE_USER_DEFAULT,"UShort",0,"UShort",type) if(settype!=-1){ NumPut(settype,dest+0,0,"UShort") } vFree(tmp) } return dest } ;VARIANTに格納された内容を通常のAutoHotkey変数として取得 ;rawsizeが1,2,4の場合、格納されている生の値を取得 ;rawsizeが0の場合、文字列に変換して取得 fromVariant(var,rawsize=0){ global LOCALE_USER_DEFAULT if(rawsize=0){ type =NumGet(var+0,0,"UShort") if((type=9)||(type=13)){ ;COMオブジェクト pObj =NumGet(var+8) AddRef(pObj) return pObj }else if(type 0xFF){ ;ポインタもしくは配列(暫定) return NumGet(var+8) }else{ ;VT_BSTRに変換 var2 =Malloc(16) DllCall("oleaut32.dll¥VariantInit","UInt",var2) DllCall("oleaut32.dll¥VariantChangeTypeEx","UInt",var2,"UInt",var,"UInt",LOCALE_USER_DEFAULT,"UShort",0,"UShort",0x8) ;値をAnsiに変換 wc2mb_ref(NumGet(var2+8),res) vFree(var2) return res } }else if(rawsize=1){ return NumGet(var+8,0,"UChar") }else if(rawsize=2){ return NumGet(var+8,0,"UShort") }else if(rawsize=4){ return NumGet(var+8) }else{ return fromVariant(var,0) } } ;VARIANTを解放(getに-1以外を指定すると、値を取得して返す) vFree(ByRef var,get=-1){ if(get!=-1){ res =fromVariant(var,get) }else{ res =0 } DllCall("oleaut32.dll¥VariantClear","UInt",var) Free(var) return res } /* ********************************** IDispatch用 ********************************** / ;オブジェクトを生成する CreateObject(clsid,iid="",CLSCTX=5){;CLSCTX_SERVER global IID_IDispatch if(!IID_IDispatch){ ActiveX() } guid =0 if(RegExMatch(clsid,"^¥{[¥-0-9a-fA-F]{36}¥}$")){ guid =GUID(clsid) }else{ guid =ProgID(clsid) } if(iid=""){ iid2 =IID_IDispatch }else{ iid2 =GUID(iid) } ppRes =0 el =DllCall("ole32.dll¥CoCreateInstance","UInt",guid,"UInt",0,"UInt",CLSCTX,"UInt",iid2,"UIntP",ppRes,"UInt") Free(guid) if(iid2!=IID_IDispatch){ Free(iid2) } ErrorLevel =el return ppRes } ;objが持つnameメンバのDispatchIDを得る GetDispID(ByRef obj,name){ global IID_NULL,LOCALE_USER_DEFAULT wName =mb2wc_ref(name) dispid =0 DllCall(M(obj,5),"UInt",obj,"UInt",IID_NULL,"UIntP",wName,"UInt",1,"UInt",LOCALE_USER_DEFAULT,"UIntP",dispid,"UInt") Free(wName) return dispid } ;引数からDISPPARAMSを生成 CreateParam(ByRef p1, ByRef p2, ByRef p3, ByRef p4, ByRef p5, ByRef p6, ByRef p7, ByRef p8, ByRef p9, ByRef p10){ ;引数を数える(0xFFFFFFFFFFFFFFFFの前までが与えられた引数) num =0 format =A_FormatInteger SetFormat,Integer,D Loop,10{ if(p%A_Index%=0xFFFFFFFFFFFFFFFF){ break } num++ } ;num個のVARIANTARG配列を作成 if(num=0){ pvArgs =0 }else{ pvArgs =Malloc(16*num) ptr =pvArgs+16*(num-1) ;引数をセットしていく Loop,%num%{ toVariant(p%A_Index%,ptr) ptr-=16 } } SetFormat,Integer,%format% ;DISPPARAMS作成 res =Malloc(16) NumPut(pvArgs,res+0) NumPut(num,res+8) return res } ;DISPPARAMSを解放 FreeParam(ByRef params){ num =NumGet(params+8) pvArgs =NumGet(params+0) pvNArgs =NumGet(params+4) ;VARIANTARGの解放処理 ptr =pvArgs Loop,%num%{ vFree(ptr) ptr+=16 } ;VARIANTARG自体の解放 Free(ptr) ;rgdispidNamedArgsの解放 if(pvNArgs!=0){ Free(pvNArgs) } ;本体メモリ解放 Free(params) } Invoke(ByRef pObj,ByRef dispid,mode,ByRef params){ global IID_NULL,LOCALE_USER_DEFAULT pvRes =Malloc(16) DllCall("oleaut32.dll¥VariantInit",UInt,pvRes) DllCall(M(pObj,6),UInt,pObj,UInt,dispid,UInt,IID_NULL,UInt,LOCALE_USER_DEFAULT,UInt,mode,UInt,params,UInt,pvRes,UInt,0,UInt,0,UInt) return pvRes } inv(obj,name,p1=0xFFFFFFFFFFFFFFFF,p2=0xFFFFFFFFFFFFFFFF,p3=0xFFFFFFFFFFFFFFFF,p4=0xFFFFFFFFFFFFFFFF,p5=0xFFFFFFFFFFFFFFFF,p6=0xFFFFFFFFFFFFFFFF,p7=0xFFFFFFFFFFFFFFFF,p8=0xFFFFFFFFFFFFFFFF,p9=0xFFFFFFFFFFFFFFFF,p10=0xFFFFFFFFFFFFFFFF){ if((dispid =GetDispID(obj,name))!=0){ params =CreateParam(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) pvRes =Invoke(obj,dispid,1,params) FreeParam(params) return vFree(pvRes,0) } } gp(obj,name,p1=0xFFFFFFFFFFFFFFFF,p2=0xFFFFFFFFFFFFFFFF,p3=0xFFFFFFFFFFFFFFFF,p4=0xFFFFFFFFFFFFFFFF,p5=0xFFFFFFFFFFFFFFFF,p6=0xFFFFFFFFFFFFFFFF,p7=0xFFFFFFFFFFFFFFFF,p8=0xFFFFFFFFFFFFFFFF,p9=0xFFFFFFFFFFFFFFFF,p10=0xFFFFFFFFFFFFFFFF){ if((dispid =GetDispID(obj,name))!=0){ params =CreateParam(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) pvRes =Invoke(obj,dispid,2,params) FreeParam(params) return vFree(pvRes,0) } } pp(obj,name,p1=0xFFFFFFFFFFFFFFFF,p2=0xFFFFFFFFFFFFFFFF,p3=0xFFFFFFFFFFFFFFFF,p4=0xFFFFFFFFFFFFFFFF,p5=0xFFFFFFFFFFFFFFFF,p6=0xFFFFFFFFFFFFFFFF,p7=0xFFFFFFFFFFFFFFFF,p8=0xFFFFFFFFFFFFFFFF,p9=0xFFFFFFFFFFFFFFFF,p10=0xFFFFFFFFFFFFFFFF){ if((dispid =GetDispID(obj,name))!=0){ params =CreateParam(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) ;rgdispidNamedArgsのセット namedArgs =Malloc(4) NumPut(namedArgs,params+4) NumPut(0xFFFFFFFD,namedArgs+0) NumPut(1,params+12) pvRes =Invoke(obj,dispid,4,params) FreeParam(params) return vFree(pvRes) } } /* ********************************** イベントシンク用コールバック関数 ********************************** / GuidIsEqual(guid1,guid2){ return DllCall("MSVCRT.dll¥memcmp","UInt",guid1,"UInt",guid2,"UInt",16)=0 } EVENTSINK_QueryInterface(pEv,iid,ppv){ global if(GuidIsEqual(iid,NumGet(pEv+8))||GuidIsEqual(iid,IID_IDispatch)||GuidIsEqual(iid,IID_IUnknown)){ NumPut(pEv,ppv+0) DllCall(M(pEv,1),"UInt",pEv) return 0 } NumPut(0,ppv+0) return 0x80004002 } EVENTSINK_AddRef(pEv){ cRef =NumGet(pEv+4) cRef++ NumPut(cRef,pEv+4) return cRef } EVENTSINK_Release(pEv){ cRef =NumGet(pEv+4) cRef-- NumPut(cRef,pEv+4) if(cRef==0){ EVENTSINK_Destructor(pEv) } return cRef } EVENTSINK_GetTypeInfoCount(pEv,pct){ NumPut(0,pct+0) return 0 } EVENTSINK_GetTypeInfo(pEv,info,lcid,pInfo){ return 0x8002000B;DISP_E_BADINDEX } EVENTSINK_GetIDsOfNames(pEv,riid,szNames,cNames,lcid,pDispID){ return 0x80020006;DISP_E_UNKNOWNNAME } EVENTSINK_Invoke(pEv,dispid,riid,lcid,wFlags,params,pvRes,exinf,argerr){ pTypeInfo =NumGet(pEv+24) ;GetNames hr =DllCall(M(pTypeInfo,7),"UInt",pTypeInfo, "UInt",dispid, "UIntP",bstr, "UInt",1, "UIntP",count) if(hr!=0){ return 0 } wc2mb_ref(bstr,ev) cb =GetOleEventCallback(NumGet(pEv+12),ev) if(cb){ DllCall(cb,"UInt",NumGet(pEv+28), "UInt",params, "UInt",pvRes) } } EVENTSINK_Constructor(){ static vtEventSink if(!vtEventSink){ vtEventSink =Malloc(28) NumPut(RegisterCallback("EVENTSINK_QueryInterface"),vtEventSink+0) NumPut(RegisterCallback("EVENTSINK_AddRef"),vtEventSink+4) NumPut(RegisterCallback("EVENTSINK_Release"),vtEventSink+8) NumPut(RegisterCallback("EVENTSINK_GetTypeInfoCount"),vtEventSink+12) NumPut(RegisterCallback("EVENTSINK_GetTypeInfo"),vtEventSink+16) NumPut(RegisterCallback("EVENTSINK_GetIDsOfNames"),vtEventSink+20) NumPut(RegisterCallback("EVENTSINK_Invoke"),vtEventSink+24) } pEv =Malloc(32) NumPut(vtEventSink,pEv+0) return pEv } EVENTSINK_Destructor(pEv){ Release(NumGet(pEv+28)) Free(pEv) } /* ********************************** コネクト用のインターフェイスIDを検索 ********************************** / find_iid(ByRef obj,ByRef itf,ByRef iid,ByRef refPTypeInfo=0xFFFFFFFFFFFFFFFF){ global LOCALE_USER_DEFAULT ;GetTypeInfo hr =DllCall(M(disp,4),"UInt",obj, "UInt",0, "UInt",LOCALE_USER_DEFAULT, "UIntP",pTypeInfo) if(hr!=0){ return hr } ;GetContainingTypeLib hr =DllCall(M(pTypeInfo,18),"UInt",pTypeInfo, "UIntP",pTypeLib, "UIntP",index) Release(pTypeInfo) if(hr!=0){ return hr } if(!itf){ ;GetTypeInfoOfGuid hr =DllCall(M(pTypeLib,5),"UInt",pTypeLib, "UIntP",iid, "UIntP",refPTypeInfo) Release(pTypeLib) return hr } count =DllCall(M(pTypeLib,3),"UInt",pTypeLib);GetTypeInfoCount found =0 index =0 Loop,%count%{ hr =DllCall(M(pTypeLib,4),"UInt",pTypeLib, "UInt",index, "UIntP",pTypeInfo);GetTypeInfo if(hr!=0){ break } hr =DllCall(M(pTypeInfo,3),"UInt",pTypeInfo, "UIntP",pTypeAttr);GetTypeAttr if(hr!=0){ Release(pTypeInfo) break } if(NumGet(pTypeAttr+40)==5){;typekind==TKIND_COCLASS cTypes =NumGet(pTypeAttr+48,"UShort");cImplTypes type =0 Loop,%cTypes%{ hr =DllCall(M(pTypeInfo,8),"UInt",pTypeInfo, "UInt",type, "UIntP",RefType);GetRefTypeOfImplType if(hr!=0){ break } hr =DllCall(M(pTypeInfo,14),"UInt",pTypeInfo, "UInt",RefType, "UIntP",pImplTypeInfo);GetRefTypeInfo if(hr!=0){ break } ;GetDocumentation hr =DllCall(M(pImplTypeInfo,12),"UInt",pImplTypeInfo, "Int",-1, "UIntP",bstr, "UInt",0, "UInt",0, "UInt",0) if(hr!=0){ Release(pImplTypeInfo) break } wc2mb_ref(bstr,str) if(str==itf){ ;GetTypeAttr if(DllCall(M(pImplTypeInfo,3),"UInt",pImplTypeInfo, "UIntP",pImplTypeAttr)=0){ found =1 iid =Malloc(16) DllCall("kernel32.dll¥RtlMoveMemory", "UInt",iid, "UInt",pImplTypeAttr, "UInt",16) if(refPTypeInfo!=0xFFFFFFFFFFFFFFFF){ refPTypeInfo =pImplTypeInfo AddRef(pImplTypeInfo) } ;ReleaseTypeAttr DllCall(M(pImplTypeInfo,3),"UInt",pImplTypeInfo, "UInt",pImplTypeAttr) } } Release(pImplTypeInfo) if(found||(hr!=0)){ break } type++ } } hr =DllCall(M(pTypeInfo,3),"UInt",pTypeInfo, "UInt",pTypeAttr);ReleaseTypeAttr Release(pTypeInfo) if(found||(hr!=0)){ break } index++ } Release(pTypeLib) if(!found){ return 0x80004002 }else{ return hr } } find_default_source(ByRef obj,ByRef iid,ByRef refPTypeInfo){ global IID_IProvideClassInfo;,IID_IProvideClassInfo2 /* pProvideClassInfo2 =QueryInterface(obj,IID_IProvideClassInfo2) if(ErrorLevel________==0){ ;GetGUID hr =DllCall(M(pProvideClassInfo2,4),"UInt",pProvideClassInfo2, "UInt",1, "UIntP",iid) Release(pProvideClassInfo2) return find_iid(obj,"",iid,refPTypeInfo) } / pProvideClassInfo =QueryInterface(obj,IID_IProvideClassInfo) if(ErrorLevel!=0){ return ErrorLevel } ;GetClassInfo hr =DllCall(M(pProvideClassInfo,3),"UInt",pProvideClassInfo, "UIntP",pTypeInfo) Release(pProvideClassInfo) if(hr!=0){ return hr } ;GetTypeAttr hr =DllCall(M(pTypeInfo,3),"UInt",pTypeInfo, "UIntP",pTypeAttr) if(hr!=0){ Release(pTypeInfo) return hr } cTypes =NumGet(pTypeAttr+48,"UShort");cImplTypes type =0 Loop,%cTypes%{ hr =DllCall(M(pTypeInfo,9),"UInt",pTypeInfo, "UInt",type, "UIntP",iFlags);GetImplTypeFlags if(hr!=0){ continue } if((iFlags 0x3)=0x3){;((iFlags IMPLTYPEFLAG_FDEFAULT) (iFlags IMPLTYPEFLAG_FSOURCE)) hr =DllCall(M(pTypeInfo,8),"UInt",pTypeInfo, "UInt",type, "UIntP",RefType);GetRefTypeOfImplType if(hr!=0){ continue } hr =DllCall(M(pTypeInfo,14),"UInt",pTypeInfo, "UInt",RefType, "UIntP",refPTypeInfo);GetRefTypeInfo if(hr!=0){ break } } type++ } DllCall(M(pTypeInfo,3),"UInt",pTypeInfo, "UInt",pTypeAttr);ReleaseTypeAttr Release(pTypeInfo) if(!refPTypeInfo){ if(hr==0){ return 0x8000FFFF }else{ return hr } } if(DllCall(M(refPTypeInfo,3),"UInt",refPTypeInfo, "UIntP",pTypeAttr)=0){;GetTypeAttr iid =Malloc(16) DllCall("kernel32.dll¥RtlMoveMemory", "UInt",iid, "UInt",pTypeAttr, "UInt",16) DllCall(M(refPTypeInfo,3),"UInt",refPTypeInfo, "UInt",pTypeAttr);ReleaseTypeAttr }else{ Release(refPTypeInfo) refPTypeInfo ="" } return hr } EntryOleEventPrefix(ByRef prefix){ global static OleEventCount=0 if(OleEventID_%prefix%){ return OleEventID_%prefix% }else{ OleEventID_%prefix% =OleEventCount OleEventPrefix_%OleEventCount% =prefix return OleEventCount++ } } GetOleEventCallback(id,ByRef evt){ global local prefix,cb prefix =OleEventPrefix_%id% if(prefix){ if(OleEventCallback_%prefix%%evt%){ return OleEventCallback_%prefix%%evt% } cb =RegisterCallback(prefix . evt) if(cb){ OleEventCallback_%prefix%%evt% =cb return cb } } } ConnectObject(obj,prefix,itf=0xFFFFFFFFFFFFFFFF){ global IID_IConnectionPointContainer if(itf==0xFFFFFFFFFFFFFFFF){ hr =find_default_source(obj,iid,pTypeInfo) }else{ hr =find_iid(obj,itf,iid,pTypeInfo) } if(hr!=0){ ErrorLevel =hr return 0 } pContainer =QueryInterface(obj,IID_IConnectionPointContainer) if(ErrorLevel!=0){ Release(pTypeInfo) return 0 } ;FindConnectionPoint hr =DllCall(M(pContainer,4),"UInt",pContainer, "UInt",iid, "UIntP",pConnectionPoint) Release(pContainer) if(hr!=0){ Release(pTypeInfo) return 0 } pIEV =EVENTSINK_Constructor() NumPut(iid,pIEV+8) ;Advise hr =DllCall(M(pConnectionPoint,5),"UInt",pConnectionPoint, "UInt",pIEV, "UIntP",dwCookie) if(hr!=0){ return 0 } AddRef(obj) evid =EntryOleEventPrefix(prefix) NumPut(evid,pIEV+12) NumPut(dwCookie,pIEV+16) NumPut(pConnectionPoint,pIEV+20) NumPut(pTypeInfo,pIEV+24) NumPut(obj,pIEV+28) } evArgc(ByRef para){ return NumGet(para+8) } evArgv(ByRef para,idx){ num =NumGet(para+8) if(idx num){ return fromVariant(NumGet(para+0)+(num-1-idx)*16) } } evReturn(ByRef res,value){ toVariant(value,res) } /* ********************************** ディスパッチオブジェクト作成 ********************************** / DISPATCH_QueryInterface(ptr,iid,ppv){ global if(GuidIsEqual(iid,IID_IDispatch)||GuidIsEqual(iid,IID_IUnknown)){ NumPut(ptr,ppv+0) DllCall(M(ptr,1),"UInt",ptr) return 0 }else{ NumPut(0,ppv+0) return 0x80004002 } } DISPATCH_AddRef(ptr){ cRef =NumGet(ptr+4) cRef++ NumPut(cRef,ptr+4) return cRef } DISPATCH_Release(ptr){ cRef =NumGet(ptr+4) cRef-- NumPut(cRef,ptr+4) if(cRef==0){ Free(ptr) } return cRef } DISPATCH_GetTypeInfoCount(ptr,pct){ NumPut(0,pct+0) return 0 } DISPATCH_GetTypeInfo(ptr,info,lcid,pInfo){ return 0x8002000B;DISP_E_BADINDEX } DISPATCH_GetIDsOfNames(ptr,riid,pszNames,cNames,lcid,pDispID){ wc2mb_ref(NumGet(pszNames+0),name) hr =GetOleMethodCallback(NumGet(ptr+12),name,cb) NumPut(cb,pDispID+0) return hr } DISPATCH_Invoke(ptr,dispid,riid,lcid,wFlags,params,pvRes,exinf,argerr){ DllCall(dispid,"UInt",ptr, "UInt",params, "UInt",pvRes, "UInt",wFlags) return 0 } EntryOleMethodsPrefix(ByRef prefix,ByRef id){ global static OleMethodsCount=0 if(OleMethodsID_%prefix%){ id =OleMethodsID_%prefix% }else{ OleMethodsID_%prefix% =OleMethodsCount OleMethodsPrefix_%OleMethodsCount% =prefix id =OleMethodsCount++ } } GetOleMethodCallback(id,ByRef name,ByRef cb){ global local prefix cb =0 prefix =OleMethodsPrefix_%id% if(prefix){ if(OleMethodCallback_%prefix%%name%){ cb =OleMethodCallback_%prefix%%name% return 0 }else{ cb =RegisterCallback(prefix . name) if(cb){ OleMethodCallback_%prefix%%name% =cb return 0 }else{ return 0x80020006 } } } } CreateDispatchObject(prefix,exsize=0){ global IID_IDispatch static vtDispatch if(!vtDispatch){ vtDispatch =Malloc(28) NumPut(RegisterCallback("DISPATCH_QueryInterface"),vtDispatch+0) NumPut(RegisterCallback("DISPATCH_AddRef"),vtDispatch+4) NumPut(RegisterCallback("DISPATCH_Release"),vtDispatch+8) NumPut(RegisterCallback("DISPATCH_GetTypeInfoCount"),vtDispatch+12) NumPut(RegisterCallback("DISPATCH_GetTypeInfo"),vtDispatch+16) NumPut(RegisterCallback("DISPATCH_GetIDsOfNames"),vtDispatch+20) NumPut(RegisterCallback("DISPATCH_Invoke"),vtDispatch+24) } EntryOleMethodsPrefix(prefix,id) ptr =Malloc(12+exsize) NumPut(vtDispatch,ptr+0) NumPut(IID_IDispatch,ptr+8) NumPut(id,ptr+12) return ptr }
https://w.atwiki.jp/gta_sa/pages/26.html
GTA San Andreas Admin Console 【使い方】 乗っている車のパラメータ変更(鍵をかけたり)、ガレージエディット、チート、テレポーターなどが使える。 インストーラ版 (Yahoo!ブリーフケースの容量を超えているのでアップできませんでした。公式サイトからダウンロードしてください。) ZIP圧縮版 [注意] このソフトを使うときは、Visual Basic 6 SP6を入れないと動きません。 よく分からない人は、こちらのソフトをインストールしてください。 ZIP圧縮版の方は、私がVisual Basic 6 SP6が無くても動くようになってると思う。 GTASA専用Window化ツール 画像を大きく Download 使い方 gta_sa_dll.exe、gta_sa_dll.dll、d3dx9_26.dllを gta_sa.exeのあるフォルダに入れて、gta_sa_dll.exeを起動する。 ※ウイルス(?)を確認しました。 TXD Workshop 4.0b Download TXDファイルをインポート・エクスポートする。IMGファイルを参照することもでき、dffファイルなどのインポート・エクスポートも可能。 txdファイルは直接開くことが出来る。複数のtxd/dffを一気に入れることができる。 IMGTool Download TXDファイルをインポート・エクスポートする。dffファイルなどのインポート・エクスポートも可能。
https://w.atwiki.jp/keiplus/pages/162.html
DLL 逆コンパイル C# Cpp JetBrains VisutalStudio 逆コンパイル 本項は書き立ての記事です。正確な情報は公式サイト、公式ドキュメントでご確認ください。 1.逆コンパイル DLL(ダイナミックリンクライブラリ)を解析してソースコードの状態を見ること。 但し逆コンパイルの行為は多くは禁止されている場合が特に商用アプリには多いので注意が必要。 しかし実態は学習のために逆コンパイルをかけることは珍しくなく、解析した結果を外に出すようなことが無いよう注意が必要。 2.dotPeek [ dotPeek Free .NET Decompiler Assembly Browser by JetBrains ] ( https //www.jetbrains.com/decompiler/ ) 逆コンパイルをするには色々な方法があるが、手っ取り早いのは「dotPeek」を使うこと。 VisualStudioがインストールされていることが条件だが、この記事2021年現在 無料で利用できる。 dotPeekはIntelliJ、PhpStorm等を開発しているJetBrains社が開発している。 3.使い方 dotPeekをインストールし起動すると、「JetBrains dotPeek」が開く。 このメニューからFile⇒Openで、解析したいdllファイルを選ぶだけでよい。 あとはAssembly Explorerに解析結果が出る。 そこから先はVisualStudioデコーディングしている感覚で扱える。 DLLを対象として右クリックから「Export to Project」でエクスポートができる。 VisualStudio本体や他のツールでコードを操作するなどの用途で使えるようになる。 dotPeekはデフォルトでは「C#」のみに対応。 他言語を解析したい場合はライブラリをダウンロードする必要がある。
https://w.atwiki.jp/boare/pages/116.html
English 日本語 リリースノート リリース日 2009/6/8 既知のバグ (2009/6/14更新) SMFエクスポート機能で、VOCALOID NRPNの並び順がおかしい。 音符の並び順を入れ替えた直後、ポインタツールでの範囲選択が正常に動作しない。 鍵盤部分でのダブルクリック操作が、ソングポジションの移動のための操作と誤認されてしまう。 注意事項 Cadenciiの全ての機能を使用するためには、version 2.0以降の.NET Framework RuntimeおよびVisual C++ ライブラリDLLが必要です。それぞれの入手先は以下の通りです。 .NET Framework Runtime .NET Framework Developer Center ダウンロード Visual C++ ライブラリDLL Microsoft Visual C++ 2008 再頒布可能パッケージ (x86) 最新バージョンのmonoを用いることで、monoが対応する各種プラットフォーム上でCadenciiを起動することが出来ます。ただし、この場合VOCALOID2 VSTiを使用する各機能は使用できません。monoの入手先は下記の通りです。 mono download ダウンロード Cadencii version 2.0.2 (566KB) CadenciiSDK version 2.0 (455KB) 不具合の修正 以下の不具合を修正しました。 2個以上のパレットツールを配置した場合、パレットツールの切り替えが正常に行えない。 音符を選択したまま他のトラックを表示すると、切り替えたトラック上の音符があたかも選択されているように誤って表示される。 [MoveTop]および[MoveEnd]ボタンを押しても、画面が自動でスクロールしない。 拍子設定ダイアログに表示される小節位置の値がクリックした小節位置の表示と異なる場合がある。また、小節位置として選べる値の範囲が正しくない場合がある。 ソースコードの入手方法 2.0系統のリポジトリはSourceForge.JPのCadenciiのSVNリポジトリにあります。SVNリポジトリのチェックアウトは、次を参考に行ってください。 svn checkout -r 233 http //svn.sourceforge.jp/svnroot/cadencii/branches/2.0 ./ 上記のコマンドは、このバージョンのソースコードをチェックアウトする場合のものです。
https://w.atwiki.jp/ipubluedictionary/pages/143.html
デバッグプリント チャートウィンドウの高さ(pixel)の取得 バックテスト時のログ コマンドプロンプト的なもの Expert AdvisorsでもDLLを使う デバッグプリント C言語でいうところのPrintf()に当たる機能として、 Print()関数がある 実際に出力された数値や文字列は MetaTrader4のターミナルのExpertsタブ内で確認できる チャートウィンドウの高さ(pixel)の取得 MetaTraderで図形を表示する場合、テキストラベルを除き、座標の指定は x軸=時間、y軸=価格で指定する。 その特性上、オブジェクトの表示が困難になる場合がある。 例えば高さが16pixelのオブジェクトの下に他のオブジェクトを配置したい場合、 16Pixelは価格で表すとどのくらいなのか?を取得しなければならない。 関数で提供されているのは、表示しているチャートの最大価格と最低価格だけで、 チャートウィンドウサイズを取得する関数は与えられていない。 なので、自力で算出しないといけないのだが、その際にはWinAPIを使わざるを得なくなる。 自分の場合、GetPaneHeights.ex4という便利なツールがネットで拾えたので それを利用させていただいております。 WinUser32.mqhをインクルドし、更にGetPaneHeights.ex4をインポートし、 GetPaneHeights()を宣言すれば、チャートウィンドウはおろか、サブウィンドウの 高さまで取得できてしまうすぐれもの。 バックテスト時のログ バックテストするとえらい勢いでハードディスク容量が減ると思ってたら ログファイルが異常に大きかったことが判明。 メタトレのインストールフォルダ以下の tester\logsに格納されているので、 自分で削除していく必要があるのかも。 設定でログ出さないとかしたほうがいいのか?っていうかできるのか? コマンドプロンプト的なもの チャートをアクティブにした状態でEnterキーを押すと、日付表示部分の一番左側に コマンドプロンプトっぽいものが表示される。 ここで通貨単位や、チャート周期などを変更できるのだが、ぶっちゃけそれよりも使うのが 表示したい日付にジャンプする機能だと思われる。 例えば 2006.01.01 とか入力すればその日付にジャンプしてくれる。 この方法以外に指定日付にジャンプする機能が見当たらないので、重宝すると思われる。 特にヒストリカル分析しているときとか。 Expert AdvisorsでもDLLを使う Expert Advisorが参照しているインジケータがDLLを使ってる場合、 Expert Advisor側でもDLLの使用を許可しないと、DLLのサービスが受けれない。 メニューの「ツール」- 「オプション」- 「Expert Advisorsタブ」の Allow DLL importsにチェックを入れればOK
https://w.atwiki.jp/mangameeya/pages/44.html
jpg画像が赤く表示されることがある。 プログレッシブJPGが正常に表示されない フォルダ間を移動していると落ちることがある 0バイトのファイルがあると落ちる場合がある。 GIFアニメーションが動かないことがある コメント jpg画像が赤く表示されることがある。 未解決 プログレッシブJPGが正常に表示されない susie-jpgプラグインで解消 フォルダ間を移動していると落ちることがある 先読み機能をオンにすると解消する場合もある 0バイトのファイルがあると落ちる場合がある。 0バイトのファイルを削除する GIFアニメーションが動かないことがある 複数ファイルから表示した場合に発生(v7.3)。v7.4Beataで対応。 コメント WINRARの5.90(×64)でrar圧縮したファイルが読めない。zip圧縮は無問題。arc.dllの古さ故か… 追記)As/Rというファイラー上でのエラーでした。エクスプローラー上では無問題だった。追々記)ファイラーではなくwinrar固有の問題のようでした。(自己解決)-- たぬたぬ (2020-04-29 14 31 04) arc.dllはRAR 5形式に対応していませんね。代わりにax7z.spi と 7z.dll を入れてください。 -- 名無しさん (2022-08-30 09 37 41) 上補足。7z.dllは32ビットのものをダウンロード 解凍もしくはインストールし、7z.dllとax7zip.spiをSusiePluginフォルダにコピー、meeyaの環境設定→ローダ設定でSusieプラグインを使うを設定してやれば行ける。 -- 名無しさん (2023-11-12 23 29 39) rarファイルの対応書いてくれてありがとう -- 名無しさん (2023-12-12 10 32 50) dllとspiのバージョンで違ってくるんじゃないのコレ?ウチも出来たり出来なかったしてるし試行錯誤だわ -- 名無し (2024-04-10 20 46 18) rar5でも見れるようになりましたありがとうございます。 -- おはげ (2024-09-18 22 18 56) とても参考になりました。 ax7z.spiは【ax7z-0.7-457y3b6.zip】のものを使用7z.dllは32bit版かどうか分らなかったので今月更新のバージョンをDLし直したところ正常に読み込みました。 -- 名無しさん (2024-09-21 05 18 06) 名前 コメント
https://w.atwiki.jp/monstertv/pages/38.html
このページはhttp //park.geocities.jp/ts_encode09/1_01.htmlからの引用です Home BonDriverを用いたHDUS使用のメモ書き (1)用意するもの (2)リアルタイム視聴について (3)EPGで録画 (4)EPG番組表から録画~EPGデータビューア (1)用意するもの 2008/08/05現在 ・BonDriver_HDUS(人柱版6) ・EpgDataCap_Bon (人柱版8.21) ・EPGデータビューア Ver 1.19 ・BonTest 1.41m3 すべて拡張ツールの中の人サイトのロダにあがっています。 (http //2sen.dip.jp/friio/fromup.html) 作者さんに感謝。 (2008/08/03追記) Microsoft社のサイトから Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ http //www.microsoft.com/downloads/details.aspx?displaylang=ja FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647 Microsoft Visual C++ 2008 再頒布可能パッケージ http //www.microsoft.com/downloads/details.aspx?displaylang=ja FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf DirectX End-User Runtimes (June 2008) - 日本語 http //www.microsoft.com/downloads/details.aspx?FamilyID=822640ab-0983-4c41-9c70-632f6f42c557 DisplayLang=ja の3つをダウンロードして、あらかじめインストールしておくことをオススメします。 EpgDataCap_Bonを解凍したあと出てくるフォルダの中にBonDriverというフォルダがあるので そこにBonDriver_HDUS.dllをコピー。 (2)リアルタイム視聴について ~その1:BonTest単体で視聴~ BontestのフォルダにBonDriver_HDUS.dllをいれて、BonDriver.dllにリネームするだけ。 Bontestフォルダに元々存在するBonDriver.dllは削除でok。 その後BonTest.exeを起動すれば地デジ番組を視聴できます。 チャンネル番号を直接指定する必要があるのに注意。 ***注意*** この方法では、EpgDataCap_BonやSegTVなどHDUSを使用するソフトが実行中の場合 「チューナーの初期化に失敗しました」となって視聴することができません。 またこの方法で視聴中にEpgTimer_Bonで予約していた録画時間になると 録画予約が失敗してしまいます。 ~その2:EpgDataCap_BonからUDP送信・BonTestで視聴~ BontestのフォルダにあるBonDriver.dllを削除し、BonDriver_UDP.dllをBonDriver.dllにリネーム。 (2008/08/05追記) BonDriver.dllの削除やBonDriver_UDP.dllのリネームを行わなくても、 EpgDataCap_Bonの「設定」→「外部アプリケーション設定」で 「View起動時のコマンドラインオプション」に /d BonDriver_UDP.dll と入れればokです。 /nd と入れなくとも視聴できるようです。 EpgDataCap_Bonの「設定」→「ネットワーク設定」タブで 「TSデータをUDPで送信する」にチェックをいれ デフォルトの「127.0.0.1 ポート1234」そのままで「追加」ボタン。 「外部アプリケーション設定」タブで「Viewで使用するexe」にBonTestを指定し、 「View起動時のコマンドラインオプション」に /nd と入れて「OK」。 その後、EpgDataCap_Bonの「View」ボタンを押すと BonTestが起動して視聴できるかと思います。 チャンネルの切替はBonTestではなくEpgDataCap_Bonで。 この方法で視聴中に音ズレが発生した場合、 BonTest右下の「リセット」ボタンを押すことで音ズレは解消されます。 この方法なら、EpgDataCap_Bonで録画中に同番組を視聴することが可能です。 またBonTestで視聴中にEpgTimer_Bonで登録していた予約の時間になった時は 予約録画の方が優先され、BonTestで視聴中のチャンネルが予約した番組のものに 自動的に変更され、録画が始まります。 ***注意*** EpgDataCap_bonからUDP送信・BonTestで視聴するにあたっては、 まずEpgDataCap_bonの方でチャンネル取得を行う必要があります。 ただ「チャンネルスキャン」ボタンを押してスキャンが終了するまで待つだけです。 (3)EPGで録画 EpgDataCap_Bon.exeを起動。チューナーがHDUSになっていることを確認。 まずはチャンネル取得のためチャンネルスキャン。終了までじっと待つ。 その後、「設定」→「EPG取得設定」にてチャンネル一覧より EPGを取得するチャンネルを選択します。 通常は全チェックで問題ないかと。 次にEPG取得。EPGデータ取得ボタンを押して、再びじっと待つ。 以上2つの操作で、 C \Documents and Settings\ユーザ名\My Documents\EpgTimerBon\ というフォルダにチャンネル設定が、 その下の C \Documents and Settings\ユーザ名\My Documents\EpgTimerBon\EpgData というフォルダにEPGデータが格納されています。 ついで、設定を行います。 「設定」→「基本設定」タブで番組を録画する場所を指定します。 さらにEPGを用いた録画予約です。 TSEpgView_Bonを起動。 「設定」でEPGデータを置いたフォルダと予約方法を設定します。 さきほどのMy Documents\EpgTimerBon\EpgDataをEPG読み込みフォルダに設定し、 予約方法ではEpgTimer_Bonを指定して、EpgTimer_Bonの場所を設定して「OK」。 後は好きな番組を選んで「予約登録」ボタンを押すだけで EpgTimer_Bonに予約されます。 最後にEpgTimer_Bonの設定です。 まずは右上の「設定」→「チューナー設定」タブでチューナーの種類と数を設定します。 HDUS1台であれば、下のように「地デジ 1」と設定して「OK」 再度「設定」→「動作設定」タブでEpgDataCap_Bonの場所を指定します。 その下の設定はお好みで。 以上でEPGによる録画予約はすべて完了です。 EpgTimer_Bonは常時起動させておいてください。 時間になればEpgDataCap_Bonが起動して録画が始まるはずです。 (4)EPG番組表から録画~EPGデータビューア 見やすい番組表を用いるにはEPGデータビューアを使います。 まずはEPGデータビューアを起動し、「設定」→「iEPG設定」と開きます。 「iEPG機能を使用する」にチェックを入れた後、 EpgTimer_Bonをチェックし、EpgTimer_Bonの場所を指定して「OK」。 次に「設定」→「画面設定」と開きます。 「予約番組の表示」でEpgTimerにチェックが入っていることを確認した後、 その右隣の「参照」にてProgram.txt(EpgTimer_Bonの予約一覧)の位置を指定します。 ここがひっかかりやすいところで デフォルトでは C \Documents and Settings\ユーザ名\My Documents\EpgTimer\Program.txt が指定されています。 ここを C \Documents and Settings\ユーザ名\My Documents\EpgTimerBon\Program.txt に書き換えます。 デフォルトだとEpgTimerとなっている部分をEpgTimerBonにするわけです。 あとは「ファイル」→「ファイルの読み込み」で C \Documents and Settings\ユーザ名\My Documents\EpgTimerBon\EpgData 以下のEPGファイルをすべて開けば、番組表が表示されます。 予約したい番組の番組名をクリックして「EpgTimer登録」ボタンを押せば EpgTimer_Bonに予約されます。 あとはさきほどと同様にEpgTimer_Bonを起動させておくと 時間になるとEpgDataCap_Bonが起動して録画が始まります。 ついでに、EpgTimer_BonやEpgDataCap_Bonの「設定」→「外部アプリケーション設定」で 「EPG表示で使用するexe」をEPGデータビューアに指定し、 「起動時のオプション」を「EpgDataCapのデータファイルパス一覧」に設定しておくと EpgTimer_BonやEpgDataCap_Bonで「EPG表示」ボタンを押した際に EPGデータビューアが立ち上がった上で、現在のEPG番組表を表示してくれます。 以上、大ざっぱな説明ですがHDUS利用のきっかけになれば幸いです。 Home
https://w.atwiki.jp/ohden/pages/785.html
Webサイトprojectの参照設定 Visual Studio 2008 Professional Windows 7-64bit Professional Visual Studio2008でASP.NET用に作られたprojectを開くと『proj』fileが無かった... デフォで無いのか、何らかの設定とかやると無いのかは分からんが、とにかく無かった。 でも参照設定とかはある。 で、DLLへの参照設定を追加すると、DLL自体はcopyされるしbuildも成功するようになるんだけど...どこに設定されてるかが分かんない。 commit対象にも出てこないから、既存のfileへの変更でないことは分かる。 で、調べてみてたら、binフォルダ配下にrefreshって拡張子のfileができてることが分かった。 中見てみると...DLLへの相対pathが入ってる。 試しにこのfileとdll移動させてみたところ、buildが失敗するようになった。 で、refresh fileだけ戻してみたところ、buildが成功するようになった。 ってことで、参照設定はbin配下にrefreshって形で入るらしい... ってことは、1参照設定に1refresh file作られるってことか...(-ω-;) 構成管理対象のfileとしては、以下のfileに加えて『*.refresh』fileも対象にしてやる必要がある。 バージョン管理対象・対象外とするべきファイル 更新日: 2016年03月09日 (水) 14時22分21秒 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/hmiku/pages/11345.html
あるこう【登録タグ あ 初音ミク 曲 股間マフラーP】 作詞:本気マフラーP 作曲:本気マフラーP 編曲:本気マフラーP 唄:初音ミクAppend 曲紹介 ケロ声っぽくしました。KeroVeeってVSTはフリーでいいの! 本当に良いVSTです。とにかく聴いて下さい。 歌詞 離れてゆく この夏からさようなら 思い出から私は色々学び また一つその度利口になるから 悲しい私になったの 歩き続けたら何に出会える 前を見据え歩こう 歩き続けたら何に出会える 前を見据え歩こう 辛い日々に別れてさっぱりとして 何もないと決めては意固地になった 素直になればなるほど自分らしさ 見失い記憶消えるよ 歩き続けたら何に出会える 前を見据え歩こう 歩き続けたら何に出会える 前を見据え歩こう 不安が募れば複雑になるだけど 生きて行くよ これから 歩き続けたら何に出会える 前を見据え歩こう 歩き続けたら何に出会える 前を見据え歩こう 歩き続けたら何に出会える 前を見据え歩こう コメント 名前 コメント
https://w.atwiki.jp/hondashi/pages/38.html
だらだら読むのが面倒な人はこちら バッチによる自動削除 用法容量を守って正しくお使いください。 悪い事では無いのですが、セキュリティ(笑)の関係で、 デフォのコーデックは簡単には、解除or削除が出来ない。 具体的に言うとTrustedInstallerとやらが支配しているようで、 Admin権限を得ても.dllファイルを読み取りしか出来ないし、 そのファイルを登録しているレジストリの書き換えも出来ない。 私が検索してみたところ.dllファイルの方を、 プロパティ>セキュリティタブ>詳細設定>所有者タブ>編集 で現在の所有者を自分にして、 同アクセス許可タブ>アクセス許可の変更 でAdminにフルコントロールを渡すことで、 管理者権限なんちゃらが出るけど、ファイルをシステムフォルダから移動出来る。 もう一つの方法として、レジストリ内のコーデックのCLSIDのキーを消してしまおう。 たとえば [HKEY_CLASSES_ROOT\CLSID\{32d186a7-218f-4c75-8876-dd77273a8999}] を消すのだ。サブキーがあるけどそれも全部。 64bit版の場合は [HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{32d186a7-218f-4c75-8876-dd77273a8999}] も消す。(\Wow6432Node\追加ね) ただ一つ問題が、レジストリのキーにすらアクセス制限が掛けられているのはいいのだが、 またしてもTrustedInstallerに支配されているのだ。 という事で、デフォルトのregeditならキーを右クリックから上記と同じ手順で、 所有者を変更 アクセス許可を与えなければならない。 ウィルス等にレジストリを書き換えられるのは致命的になり兼ねないので、 分からんでもないが、音楽・動画が再生出来なくなったってそこまで困らないだろうと、 そこまでデフォのコーデックを守らんでもいいだろうと思った。 以下CLSIDをダラダラと HKEY_CLASSES_ROOT\(Wow6432Node\)CLSID\ 以下に続く文字列 .dllファイル名 何を再生する時にしゃしゃり出てくるか コーデック名となる文字列 CLSID msmpeg2adec.dl AAC、DVDAudio Microsoft AAC Audio Decoder MFT {32d186a7-218f-4c75-8876-dd77273a8999} Microsoft DTV-DVD Audio Decoder {E1F1A0B8-BEEE-490D-BA7C-066C40B5E2B9} msmpeg2vdec.dll H.264とかMPEG4-AVCとかとDVDVideo Microsoft DXVA Allocator {10FEF81C-0DAA-4af0-B714-1F1689C08C8C} Microsoft DTV-DVD Video Decoder {212690FB-83E5-4526-8FD7-74478B7939CD} mp4sdecd.dll XvidとかDivxとか Mpeg4s Decoder DMO {2a11bae2-fe6e-4249-864b-9e9ed6e8dbc2} Mpeg4s Decoder MFT {5686a0d9-fe39-409f-9dff-3fdbc849f9f5} mp3dmod.dll mp3 MP3 Decoder DMO {bbeea841-0a63-4f52-a7ab-a9b3a84ed38a} レジストリにコーデックお気に入りを追加